package demo1;

public class grammar {
    public static void main(String[] args) {
        //一维数组的定义方法
        int[] arr1 = {1, 2, 3, 4, 5};
        int[] arr2 = new int[5];
        int[] arr3 = new int[]{1, 2, 3, 4, 5}; //注意这种定义方式下第二个[]里不能写数字
        //这里的new相当于创建了一个对象，然后调用了构造方法，所以arr3是一个对象，而不是一个数组
        //new类似于C语言里的malloc

        //通过arr.length可以获取数组长度
        //打印
        for(int i = 0; i < arr1.length; i++) {
            System.out.println(arr1[i]);
        }

        //java是允许数组长度为0的，也支持变长数组
        int[] arr4 = new int[0];
        //长度为0的数组是不允许访问的，会报空指针异常，它跟null是一样的
        //但数组长度为0和null不一样，长度为0的数组是存在的，只是长度为0而已

        //增强的for循环
        for(int i : arr1) {
            System.out.println(i);
            //注意这里是i，不是arr1[i]
        }

        //二维数组的定义方法
        int[][] arr2d1 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} };
        int[][] arr2d2 = new int[3][3]; //未赋初值
        int[][] arr2d3 = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        //java是不允许二维数组长度为0的，但可以定义一个长度为0的一维数组
        //int[][] arr2d4 = new int[0][0];
        //java中二维数组声明时必须给出行数，列数是可变的
        int[][] arr2d5 = new int[3][];

    }
}
